home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / hplip / ui4 / filetable.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  12.6 KB  |  347 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import sys
  5. import os.path as os
  6. import os
  7. from base.g import *
  8. from base import utils, magic
  9. from prnt import cups
  10. from base.codes import *
  11. from ui_utils import *
  12. from PyQt4.QtCore import *
  13. from PyQt4.QtGui import *
  14. from mimetypesdialog import MimeTypesDialog
  15. FILETABLE_TYPE_PRINT = 0
  16. FILETABLE_TYPE_FAX = 1
  17.  
  18. class FileTable(QWidget):
  19.     
  20.     def __init__(self, parent):
  21.         QWidget.__init__(self, parent)
  22.         self.parent = parent
  23.         self.working_dir = user_conf.workingDirectory()
  24.         self.initUi()
  25.         self.file_list = []
  26.         self.typ = FILETABLE_TYPE_PRINT
  27.         self.selected_filename = None
  28.         self.fax_add_callback = None
  29.         self.allowable_mime_types = cups.getAllowableMIMETypes()
  30.  
  31.     
  32.     def initUi(self):
  33.         self.gridlayout = QGridLayout(self)
  34.         self.gridlayout.setObjectName('gridlayout')
  35.         self.FileTable = QTableWidget(self)
  36.         self.FileTable.setObjectName('FileTable')
  37.         self.gridlayout.addWidget(self.FileTable, 0, 0, 1, 6)
  38.         self.AddFileButton = QPushButton(self)
  39.         self.AddFileButton.setObjectName('AddFileButton')
  40.         self.gridlayout.addWidget(self.AddFileButton, 1, 0, 1, 1)
  41.         self.RemoveFileButton = QPushButton(self)
  42.         self.RemoveFileButton.setObjectName('RemoveFileButton')
  43.         self.gridlayout.addWidget(self.RemoveFileButton, 1, 1, 1, 1)
  44.         self.MoveFileUpButton = QPushButton(self)
  45.         self.MoveFileUpButton.setObjectName('MoveFileUpButton')
  46.         self.gridlayout.addWidget(self.MoveFileUpButton, 1, 2, 1, 1)
  47.         self.MoveFileDownButton = QPushButton(self)
  48.         self.MoveFileDownButton.setObjectName('MoveFileDownButton')
  49.         self.gridlayout.addWidget(self.MoveFileDownButton, 1, 3, 1, 1)
  50.         spacerItem = QSpacerItem(91, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
  51.         self.gridlayout.addItem(spacerItem, 1, 4, 1, 1)
  52.         self.ShowTypesButton = QPushButton(self)
  53.         self.ShowTypesButton.setObjectName('ShowTypesButton')
  54.         self.gridlayout.addWidget(self.ShowTypesButton, 1, 5, 1, 1)
  55.         self.AddFileButton.setText(self._FileTable__tr('Add...'))
  56.         self.AddFileButton.setIcon(QIcon(load_pixmap('list_add', '16x16')))
  57.         self.connect(self.AddFileButton, SIGNAL('clicked()'), self.AddFileButton_clicked)
  58.         self.RemoveFileButton.setIcon(QIcon(load_pixmap('list_remove', '16x16')))
  59.         self.RemoveFileButton.setText(self._FileTable__tr('Remove'))
  60.         self.connect(self.RemoveFileButton, SIGNAL('clicked()'), self.RemoveFileButton_clicked)
  61.         self.MoveFileUpButton.setText(self._FileTable__tr('Move Up'))
  62.         self.MoveFileUpButton.setIcon(QIcon(load_pixmap('up', '16x16')))
  63.         self.connect(self.MoveFileUpButton, SIGNAL('clicked()'), self.MoveFileUpButton_clicked)
  64.         self.MoveFileDownButton.setText(self._FileTable__tr('Move Down'))
  65.         self.MoveFileDownButton.setIcon(QIcon(load_pixmap('down', '16x16')))
  66.         self.connect(self.MoveFileDownButton, SIGNAL('clicked()'), self.MoveFileDownButton_clicked)
  67.         self.ShowTypesButton.setText(self._FileTable__tr('Show Valid Types...'))
  68.         self.ShowTypesButton.setIcon(QIcon(load_pixmap('mimetypes', '16x16')))
  69.         self.connect(self.ShowTypesButton, SIGNAL('clicked()'), self.ShowTypesButton_clicked)
  70.         self.FileTable.setContextMenuPolicy(Qt.CustomContextMenu)
  71.         self.connect(self.FileTable, SIGNAL('customContextMenuRequested(const QPoint &)'), self.FileTable_customContextMenuRequested)
  72.         self.headers = [
  73.             self._FileTable__tr('Name'),
  74.             self._FileTable__tr('Type'),
  75.             self._FileTable__tr('Folder/Path')]
  76.         self.FileTable.setSortingEnabled(False)
  77.         self.connect(self.FileTable, SIGNAL('itemSelectionChanged()'), self.FileTable_itemSelectionChanged)
  78.  
  79.     
  80.     def setWorkingDir(self, d):
  81.         if os.path.exists(d):
  82.             self.working_dir = d
  83.         
  84.  
  85.     
  86.     def getWorkingDir(self):
  87.         if self.file_list:
  88.             self.working_dir = os.path.pathname(self.file_list[0][0])
  89.             user_conf.setWorkingDirectory(self.working_dir)
  90.         
  91.         return self.working_dir
  92.  
  93.     
  94.     def setType(self, t):
  95.         self.typ = t
  96.         if self.typ == FILETABLE_TYPE_FAX:
  97.             self.headers = [
  98.                 self._FileTable__tr('Name'),
  99.                 self._FileTable__tr('Type'),
  100.                 self._FileTable__tr('Pages')]
  101.             if log.is_debug():
  102.                 self.headers.append(self._FileTable__tr('File'))
  103.             
  104.         
  105.  
  106.     
  107.     def setFaxCallback(self, callback):
  108.         self.fax_add_callback = callback
  109.  
  110.     
  111.     def isNotEmpty(self):
  112.         return len(self.file_list)
  113.  
  114.     
  115.     def FileTable_itemSelectionChanged(self):
  116.         self.selected_filename = self.currentFilename()
  117.         self.setUpDownButtons()
  118.  
  119.     
  120.     def updateUi(self, show_add_file_if_empty = True):
  121.         self.FileTable.clear()
  122.         self.FileTable.setRowCount(len(self.file_list))
  123.         self.FileTable.setColumnCount(0)
  124.         if self.file_list:
  125.             self.emit(SIGNAL('isNotEmpty'))
  126.             QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
  127.             
  128.             try:
  129.                 selected = None
  130.                 self.FileTable.setColumnCount(len(self.headers))
  131.                 self.FileTable.setHorizontalHeaderLabels(self.headers)
  132.                 flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled
  133.                 for row, f in enumerate(self.file_list):
  134.                     (filename, mime_type, mime_type_desc, title, num_pages) = f
  135.                     col = 0
  136.                     if self.typ == FILETABLE_TYPE_FAX:
  137.                         if title:
  138.                             i = QTableWidgetItem(title)
  139.                         else:
  140.                             i = QTableWidgetItem(os.path.basename(filename))
  141.                     else:
  142.                         i = QTableWidgetItem(os.path.basename(filename))
  143.                     i.setData(Qt.UserRole, QVariant(filename))
  144.                     i.setFlags(flags)
  145.                     if self.selected_filename is not None and self.selected_filename == filename:
  146.                         selected = i
  147.                     
  148.                     self.FileTable.setItem(row, col, i)
  149.                     col += 1
  150.                     i = QTableWidgetItem(mime_type_desc)
  151.                     i.setFlags(flags)
  152.                     self.FileTable.setItem(row, col, i)
  153.                     col += 1
  154.                     if self.typ == FILETABLE_TYPE_PRINT:
  155.                         i = QTableWidgetItem(os.path.dirname(filename))
  156.                         i.setFlags(flags)
  157.                         self.FileTable.setItem(row, col, i)
  158.                         col += 1
  159.                     
  160.                     if self.typ == FILETABLE_TYPE_FAX:
  161.                         if num_pages < 1:
  162.                             i = QTableWidgetItem(self._FileTable__tr('(unknown)'))
  163.                         else:
  164.                             i = QTableWidgetItem(unicode(num_pages))
  165.                         i.setFlags(flags)
  166.                         self.FileTable.setItem(row, col, i)
  167.                         col += 1
  168.                         if self.typ == FILETABLE_TYPE_FAX and log.is_debug():
  169.                             i = QTableWidgetItem(filename)
  170.                             i.setFlags(flags)
  171.                             self.FileTable.setItem(row, col, i)
  172.                         
  173.                     log.is_debug()
  174.                 
  175.                 self.FileTable.resizeColumnsToContents()
  176.                 if selected is None:
  177.                     selected = self.FileTable.item(0, 0)
  178.                 
  179.                 selected.setSelected(True)
  180.                 self.FileTable.setCurrentItem(selected)
  181.             finally:
  182.                 QApplication.restoreOverrideCursor()
  183.  
  184.             self.RemoveFileButton.setEnabled(True)
  185.             self.RemoveFileButton.setIcon(QIcon(load_pixmap('list_remove', '16x16')))
  186.             self.setUpDownButtons()
  187.         else:
  188.             self.emit(SIGNAL('isEmpty'))
  189.             self.RemoveFileButton.setEnabled(False)
  190.             self.setUpDownButtons()
  191.             if show_add_file_if_empty:
  192.                 self.AddFileButton.emit(SIGNAL('clicked()'))
  193.             
  194.  
  195.     
  196.     def setUpDownButtons(self):
  197.         if self.file_list:
  198.             i = self.FileTable.currentRow()
  199.             if len(self.file_list) > 1 and i != len(self.file_list) - 1:
  200.                 self.MoveFileDownButton.setEnabled(True)
  201.             else:
  202.                 self.MoveFileDownButton.setEnabled(False)
  203.             if len(self.file_list) > 1 and i != 0:
  204.                 self.MoveFileUpButton.setEnabled(True)
  205.             else:
  206.                 self.MoveFileUpButton.setEnabled(False)
  207.         else:
  208.             self.MoveFileDownButton.setEnabled(False)
  209.             self.MoveFileUpButton.setEnabled(False)
  210.  
  211.     
  212.     def AddFileButton_clicked(self):
  213.         if self.typ == FILETABLE_TYPE_PRINT:
  214.             s = self._FileTable__tr('Select File(s) to Print')
  215.         else:
  216.             s = self._FileTable__tr('Select File(s) to Send')
  217.         files = list(QFileDialog.getOpenFileNames(self, s, self.working_dir, self._FileTable__tr('All files (*)')))
  218.         files = [ unicode(f) for f in files ]
  219.  
  220.     
  221.     def addFileList(self, file_list):
  222.         for f in file_list:
  223.             if self.typ == FILETABLE_TYPE_PRINT:
  224.                 self.addFileFromUI(f)
  225.                 continue
  226.             self.fax_add_callback(f)
  227.         
  228.  
  229.     
  230.     def addFileFromUI(self, f, title = '', num_pages = 0):
  231.         f = os.path.abspath(os.path.expanduser(f))
  232.         log.debug('Trying to add file: %s' % f)
  233.         if os.path.exists(f) and os.access(f, os.R_OK):
  234.             mime_type = magic.mime_type(f)
  235.             mime_type_desc = mime_type
  236.             log.debug('File type of file %s: %s' % (f, mime_type))
  237.             
  238.             try:
  239.                 mime_type_desc = MIME_TYPES_DESC[mime_type][0]
  240.             except KeyError:
  241.                 if self.typ == FILETABLE_TYPE_PRINT:
  242.                     FailureUI(self, self._FileTable__tr("<b>You are trying to add a file '%1' that cannot be directly printed with this utility.</b><p>To print this file, use the print command in the application that created it.<p>Note: Click <i>Show Valid Types...</i> to view a list of compatible file types that can be directly printed from this utility.").arg(f), self._FileTable__tr('HP Device Manager'))
  243.                 else:
  244.                     FailureUI(self, self._FileTable__tr("<b>You are trying to add a file '%1' that cannot be directly faxed with this utility.</b><p>To fax this file, use the print command in the application that created it (using the appropriate fax print queue).<p>Note: Click <i>Show Valid Types...</i> to view a list of compatible file types that can be directly added to the fax file list in this utility.").arg(f), self._FileTable__tr('HP Device Manager'))
  245.             except:
  246.                 self.typ == FILETABLE_TYPE_PRINT
  247.  
  248.             self.addFile(f, mime_type, mime_type_desc, title, num_pages)
  249.         else:
  250.             FailureUI(self, self._FileTable__tr("<b>Unable to add file '%1' to file list (file not found or insufficient permissions).</b><p>Check the file name and try again.").arg(f), self._FileTable__tr('HP Device Manager'))
  251.  
  252.     
  253.     def addFile(self, f, mime_type, mime_type_desc, title, num_pages):
  254.         log.debug('Adding file %s (%s,%s,%s,%d)' % (f, mime_type, mime_type_desc, title, num_pages))
  255.         self.file_list.append((f, mime_type, mime_type_desc, title, num_pages))
  256.         self.updateUi()
  257.         self.emit(SIGNAL('fileListChanged'))
  258.  
  259.     
  260.     def currentFilename(self):
  261.         i = self.FileTable.item(self.FileTable.currentRow(), 0)
  262.         if i is None:
  263.             return None
  264.         return i.data(Qt.UserRole).toString()
  265.  
  266.     
  267.     def RemoveFileButton_clicked(self):
  268.         filename = self.currentFilename()
  269.         if filename is None:
  270.             return None
  271.         return self.removeFile(filename)
  272.  
  273.     
  274.     def removeFile(self, filename):
  275.         temp = self.file_list[:]
  276.         index = 0
  277.         for f, mime_type, mime_type_desc, title, num_pages in temp:
  278.             if f == filename:
  279.                 del self.file_list[index]
  280.                 self.emit(SIGNAL('fileListChanged'))
  281.                 self.updateUi(False)
  282.                 break
  283.             
  284.             index += 1
  285.         
  286.  
  287.     
  288.     def removeFileByMIMEType(self, mime_type):
  289.         temp = self.file_list[:]
  290.         index = 0
  291.         for filename, m, mime_type_desc, title, num_pages in temp:
  292.             if m == mime_type:
  293.                 del self.file_list[index]
  294.                 self.emit(SIGNAL('fileListChanged'))
  295.                 self.updateUi(False)
  296.                 break
  297.             
  298.             index += 1
  299.         
  300.  
  301.     
  302.     def isMIMETypeInList(self, mime_type):
  303.         for filename, m, mime_type_desc, title, num_pages in self.file_list:
  304.             if m == mime_type:
  305.                 return True
  306.         
  307.         return False
  308.  
  309.     
  310.     def ShowTypesButton_clicked(self):
  311.         x = { }
  312.         for a in self.allowable_mime_types:
  313.             x[a] = MIME_TYPES_DESC.get(a, ('Unknown', 'n/a'))
  314.         
  315.         dlg = MimeTypesDialog(x, self)
  316.         dlg.exec_()
  317.  
  318.     
  319.     def MoveFileUpButton_clicked(self):
  320.         filename = self.currentFilename()
  321.         if filename is None:
  322.             return None
  323.         utils.list_move_up(self.file_list, filename, self._FileTable__compareFilenames)
  324.         self.updateUi()
  325.  
  326.     
  327.     def MoveFileDownButton_clicked(self):
  328.         filename = self.currentFilename()
  329.         if filename is None:
  330.             return None
  331.         utils.list_move_down(self.file_list, filename, self._FileTable__compareFilenames)
  332.         self.updateUi()
  333.  
  334.     
  335.     def __compareFilenames(self, a, b):
  336.         return a[0] == b
  337.  
  338.     
  339.     def FileTable_customContextMenuRequested(self, p):
  340.         print p
  341.  
  342.     
  343.     def __tr(self, s, c = None):
  344.         return qApp.translate('FileTable', s, c)
  345.  
  346.  
  347.